#ifndef _ENNEMI_H
#define _ENNEMI_H
#include "Terrain.h"
struct sEnnemi
{
    int enem_x;/**@brief Abscisse de l'ennemi */
    int enem_y;/**@brief la position en ordonnee de l'ennemi */
    int enem_indice;/**enem_indice permet de stocker sa position dans le
                        tableau d'ennemi(pour l'identifier),prend -1 à l'initialisation*/
    int enem_projectile;/**\brief l'etat du tir de l'ennemi
                    egale à 0 si le tir n'est pas lance et
                            1 si il est lance */
    int enem_direction; /**\brief sa direction. 0 pour la gauche,
                    1 pour la droite,2 pour le bas et
                    3 pour le haut*/
};
typedef struct sEnnemi Ennemi;

/**@brief Procedure enemInit qui initialise un ennemi
    <B>enemInit initialise un ennemi passer en parametre a
    une position de coordonnee (1,1) </B>*/
void enemInit(Ennemi* );

/**@brief :Fonction enemGetX
 <B> enemGetX renvoi la position en x de l'ennemi
    qui est de type entier </B>*/
int enemGetX(const Ennemi* );

/**@brief Fonction enemGetY:
 <B> enemGetY renvoi la position en y de l'ennemi
    qui est de type entier </B>*/
int enemGetY(const Ennemi* );

/**@brief :enemGetIndice->entier
<B>enemGetIndice recupere l'indice qu'occupe l'ennemi dans le tableau</B>*/
int enemGetIndice(const Ennemi* );

/**@brief :Procedure enemSetProjectile
 <B> enemSetProjectile modifie l'etat du projectile de l'ennemi,
 elle le met a 0 si elle n'est pas lancé ou a 1 si elle est lancé </B>*/
void enemSetProjectile(Ennemi* ,int n);

/**@brief :Procedure enemSetIndice
<B>enemSetIndice modifie l'indice occupé par l'ennemi dans le tableau</B> */
void enemSetIndice(Ennemi* ,int n);

/**@brief Fonction enemGetDirection:
 <B> enemGetDirection renvoi la direction pris par
    l'ennemi dont 0 pour la gauche,1 droite,
    2 bas et 3 pour le haut </B>*/
int enemGetDriection(const Ennemi* );

/**@brief Procedure enemSetDirection:
<B>enemSetDirection modifie l'etat de la direction de l'ennemi apres
verification de la validité de la nouvelle direction </B> */
void enemSetDirection(Ennemi* ,int );

/**@brief Procedure enemHaut:
 <B> enemHaut permet de deplacer l'ennemi
    vers le haut en verifiant la validité de la case avant et
    enregistre son la direction de son tir si reuissite </B>*/
void enemHaut(Ennemi* ,const Terrain* );

/**@brief Procedure enemBas:
 <B> enemBas permet de deplacer l'ennemi
    vers le bas en verifiant la validité de la case avant
    et enregistre cette direction si reuissite </B>*/
void enemBas(Ennemi* ,const Terrain* );

/**@brief Procedure enemDroit:
 <B> enemDroit permet de deplacer l'ennemi
    vers la droite appres verification de la case et
    enregistre cette direction </B>*/
void enemDroit(Ennemi* ,const Terrain* );

/**@brief Procedure enemGauche:
 <B> enemGauche permet de deplacer l'ennemi
    vers la gauche apres verrification de la validité de la case
    et enregistre cette direction si deplacement reuissie </B>*/
void enemGauche(Ennemi* ,const Terrain* );

/**@brief Procedure enemTestRegression:
 <B> enemTestRegression effectue toute une serie de test afin
    de s'assurer que tout fonctionne bien
    avant et apres modification </B>*/
void enemTestRegression();



#endif
